package com.atguigu.exercise2;

/**
 *      2、创建Account类的一个子类CheckAccount代表可透支的账户，该账户中定义一个属性
 *          overdraft代表可透支限额。在CheckAccount类中重写 withdraw方法，其算法如下：
 *
 *          如果（取款金额<账户余额），可直接取款
 *
 *          如果（取款金额>账户余额），计算需要透支的额度
 *              判断可透支额overdraft是否足够支付本次透支需要，如果可以将账户余额修改为 0，冲减可透支金额
 *              如果不可以提示用户超过可透支额的限额
 *
 *
 * @author : leimingchao
 * @date Date : 2021年08月24日 23:19
 */
public class CheckAccount extends Account {

    /**
     * 可透支额度
     */
    private double overdraft;

    public CheckAccount(int id, double balance, double annualInterestRate, int overdraft) {
        super(id, balance, annualInterestRate);
        this.overdraft = overdraft;
    }

    public double getOverdraft() {
        return overdraft;
    }

    @Override
    public void withdraw(double amount) {
        if (amount <= getBalance()) {
            // getBalance() -= amount;
            //方式一：
            // setBalance(getBalance() - amount);
            //方式二：
            super.withdraw(amount);
        } else if (overdraft >= amount - getBalance()) {
            //透支额度 + 余额足够消费
            overdraft -= (amount -getBalance());
            // setBalance(0);
            //或
            super.withdraw(getBalance());
        } else {
            System.out.println("超过可透支限额！");
        }
    }
}
